<?php

/**
 * Payment Controller
 *
 * @property Payment $Payment
 */
class PaymentsController extends AppController {

    public $name = "Payments";

    /**
     * index method
     *
     * @return void
     */
    public function index() {
        $this->set('usuario', $this->Auth->user());
        $proyect_id = $this->Session->read('proy_id');

        $this->set('proyect_id', $proyect_id);
        $this->Payment->recursive = -1;
        $payments = $this->Payment->find('all', array('conditions' => array('Payment.proyect_id' => $proyect_id), 'order' => array('Payment.fecha_pago_real' => 'ASC'),
            'fields' => array('Payment.id', 'Payment.fecha_pago_programado', 'Payment.fecha_pago_real', 'Payment.monto', 'Payment.tipo')));
        $this->set('payments', $payments);
        $autorizado = false;
        if ($proyect_id == "") {
            $this->Session->setFlash('No ha seleccionado Proyecto');
            $this->redirect(array('controller' => 'Proyects', 'action' => 'index'));
        } elseif ($this->Auth->user('group_id') == 1 || $this->Auth->user('group_id') == 13) {

            $autorizado = true;
        }
        $this->set('autorizado', $autorizado);
    }

    public function add($proyect_id) {
        $this->set('proyect_id', $proyect_id);

        if (!empty($this->data)) {
            if ($this->Payment->save($this->data)) {
                $this->Session->setFlash('El pago ha sigo guardado', "flash_custom");
                $this->redirect(array('action' => 'index', $proyect_id));
            } else {
                $this->Session->setFlash('El pago no se pudo guardar. Por favor intente nuevamente.', "flash_custom");
            }
        } else {
            App::Import('Model', 'Proyect');
            $proyecto = new Proyect();

            $proyecto->recursive = -1;
            $options['joins'] = array(
                array('table' => 'user_proyects',
                    'alias' => 'UserProyect',
                    'type' => 'Left',
                    'conditions' => array(
                        'UserProyect.proyect_id = Proyect.id'
                    )
                ),
                array('table' => 'users',
                    'alias' => 'User',
                    'type' => 'Left',
                    'conditions' => array(
                        'UserProyect.user_id = User.id'
                    )
                )
            );
            $options['conditions'] = array('Proyect.id' => $proyect_id);
            $options['fields'] = array('User.nombre', 'User.primer_apellido', 'User.segundo_apellido');
            $nombreUsuario = $proyecto->find('first', $options);
            $this->set('nombreUsuario', $nombreUsuario);
        }
    }

    /**
     * edit method
     *
     * @param string $id
     * @return void
     */
    public function edit($id = null) {
        $this->layout = 'ajax';
        if (!empty($this->data)) {
            $fecha_actual = time();
            if (strtotime($this->data['Payment']['fecha_pago_real']) <= $fecha_actual) {
                if ($this->Payment->save($this->data)) {
                    $this->Session->setFlash('El pago ha sido guardado');
                    $this->redirect(array('action' => 'index', $this->data['Payment']['proyect_id']));
                } else {
                    $this->Payment->recursive = -1;
                    $this->Session->setFlash('El pago no se pudo guardar. Por favor intentelo nuevamente.');
                }
            } else {
                $this->Session->setFlash('La fecha es mayor a la fecha actual. Por favor ingrese una fecha menor o igual a la fecha actual.', 'flash_custom');
                $this->redirect(array('action' => 'index', $this->data['Payment']['proyect_id']));
            }
        } else {
            $this->data = $this->Payment->find('first', array('conditions' => array('Payment.id' => $id)));

            App::Import('Model', 'Proyect');
            $proyecto = new Proyect();

            $proyecto->recursive = -1;
            $options['joins'] = array(
                array('table' => 'user_proyects',
                    'alias' => 'UserProyect',
                    'type' => 'Left',
                    'conditions' => array(
                        'UserProyect.proyect_id = Proyect.id'
                    )
                ),
                array('table' => 'users',
                    'alias' => 'User',
                    'type' => 'Left',
                    'conditions' => array(
                        'UserProyect.user_id = User.id'
                    )
                )
            );
            $options['conditions'] = array('Proyect.id' => $this->data["Payment"]["proyect_id"], 'User.group_id' => '19');
            $options['fields'] = array('User.nombre', 'User.primer_apellido', 'User.segundo_apellido', '');
            $nombreUsuario = $proyecto->find('first', $options);
            $this->set('nombreUsuario', $nombreUsuario);

            $this->Payment->PaymentReview->recursive = 0;
            $payment_reviews = $this->Payment->PaymentReview->find('all', array('conditions' => array('PaymentReview.payment_id' => $id), 'fields' => array('PaymentReview.id', 'PaymentReview.fecha', 'PaymentReview.observacion', 'User.nombre', 'User.primer_apellido', 'User.segundo_apellido')));
            $this->set('payment_reviews', $payment_reviews);
        }
    }

    /**
     * delete method
     *
     * @param string $id
     * @return void
     */
    public function delete($id = null, $proyect_id) {
        if ($this->Payment->delete($id)) {
            $this->Session->setFlash("Registro borrado correctamente", 'flash_custom');
            $this->redirect(array('controller' => 'Payments', 'action' => 'index', $proyect_id));
        }
    }

    public function view_reports() {

        App::Import('model', 'Branches');
        $Branch = new Branch();
        $this->set('branches', $Branch->find('list', array('fields' => array('Branch.id', 'Branch.nombre'), 'order' => array('Branch.nombre ASC'))));

        if (!empty($this->data)) {

            $regional = "";
            $this->set('regional', $Branch->find('first', array('fields' => array('Branch.id', 'Branch.nombre'), 'conditions' => array('Branch.id' => $this->data['Payment']['branch_id']))));

            if (!empty($this->data['Payment']['branch_id'])) {
                $branch_id = $this->data['Payment']['branch_id'];
            } else {
                $branch_id = 0;
            }
            $options = array();
            $options['conditions'] = array(
                'Payment.fecha_pago_programado BETWEEN ? AND ? ' => array($this->data['Payment']['fecha_inicial'], $this->data['Payment']['fecha_final']),
                'Proyect.desistio' => 0
            );

            if ($this->data['Payment']['branch_id'] != "") {

                $options['conditions']['Proyect.branch_id'] = $branch_id;
            }
            $programados = $this->Payment->find('count', $options);
            //valor total de los pagos programados en el intervalo
            $options = array();
            $options['conditions'] = array(
                'Payment.fecha_pago_programado BETWEEN ? AND ? ' => array($this->data['Payment']['fecha_inicial'], $this->data['Payment']['fecha_final']),
                'Proyect.desistio' => 0
            );
            if ($this->data['Payment']['branch_id'] != "") {
                $options['conditions']['Proyect.branch_id'] = $branch_id;
            }
            $options['fields'] = "SUM(monto) as monto";


            $valorTotalProgramados = $this->Payment->find('first', $options);


            if (isset($valorTotalProgramados[0]['monto'])) {
                $valorTotalProgramados = $valorTotalProgramados[0]['monto'];
            } else {
                $valorTotalProgramados = 0;
            }


            //conteo y valor de los  pagos programados hechos en  intervalo

            $options = array();
            $options['conditions'] = array(
                'Payment.fecha_pago_programado BETWEEN ? AND ? ' => array($this->data['Payment']['fecha_inicial'], $this->data['Payment']['fecha_final']),
                'Payment.fecha_pago_real BETWEEN ? AND ? ' => array($this->data['Payment']['fecha_inicial'], $this->data['Payment']['fecha_final']),
                'Proyect.desistio' => 0
            );
            if ($this->data['Payment']['branch_id'] != "") {
                $options['conditions']['Proyect.branch_id'] = $branch_id;
            }

            $programadosPagados = $this->Payment->find('count', $options);

            $options = array();
            $options['conditions'] = array(
                'Payment.fecha_pago_programado BETWEEN ? AND ? ' => array($this->data['Payment']['fecha_inicial'], $this->data['Payment']['fecha_final']),
                'Payment.fecha_pago_real BETWEEN ? AND ? ' => array($this->data['Payment']['fecha_inicial'], $this->data['Payment']['fecha_final']),
                'Proyect.desistio' => 0
            );
            if ($this->data['Payment']['branch_id'] != "") {
                $options['conditions']['Proyect.branch_id'] = $branch_id;
            }
            $options['fields'] = "sum(monto) as monto";

            $valorProgramadosPagados = $this->Payment->find('first', $options);

            if (isset($valorProgramadosPagados[0]['monto'])) {
                $valorProgramadosPagados = $valorProgramadosPagados[0]['monto'];
            } else {
                $valorProgramadosPagados = 0;
            }
            //Programados que se pagaron anterior al intervalo

            $options = array();
            $options['conditions'] = array(
                'Payment.fecha_pago_programado BETWEEN ? AND ? ' => array($this->data['Payment']['fecha_inicial'], $this->data['Payment']['fecha_final']),
                'Payment.fecha_pago_real < ' => $this->data['Payment']['fecha_inicial'],
                'Payment.fecha_pago_real !=' => '0000/00/00',
                'Proyect.desistio' => 0
            );
            if ($this->data['Payment']['branch_id'] != "") {
                $options['conditions']['Proyect.branch_id'] = $branch_id;
            }

            $programadosYaPagados = $this->Payment->find('count', $options);

            $options = array();
            $options['conditions'] = array(
                'Payment.fecha_pago_programado BETWEEN ? AND ? ' => array($this->data['Payment']['fecha_inicial'], $this->data['Payment']['fecha_final']),
                'Payment.fecha_pago_real < ' => $this->data['Payment']['fecha_inicial'],
                'Payment.fecha_pago_real !=' => '0000/00/00',
                'Proyect.desistio' => 0
            );

            if ($this->data['Payment']['branch_id'] != "") {
                $options['conditions']['Proyect.branch_id'] = $branch_id;
            }
            $options['fields'] = "sum(monto) as monto";


            $valorProgramadosYaPagados = $this->Payment->find('first', $options);
            if (isset($valorProgramadosYaPagados[0]['monto'])) {
                $valorProgramadosYaPagados = $valorProgramadosYaPagados[0]['monto'];
            } else {
                $valorProgramadosYaPagados = 0;
            }

            //conteo y valor de los  pagos programados que no se pagaron en el intervalo

            $options = array();
            $options['conditions'] = array(
                'Payment.fecha_pago_programado BETWEEN ? AND ? ' => array($this->data['Payment']['fecha_inicial'], $this->data['Payment']['fecha_final']),
                'OR' => array('Payment.fecha_pago_real =' => '0000/00/00', 'Payment.fecha_pago_real >' => $this->data['Payment']['fecha_final']),
                'Proyect.desistio' => 0
            );
            if ($this->data['Payment']['branch_id'] != "") {
                $options['conditions']['Proyect.branch_id'] = $branch_id;
            }

            $programadosNoPagados = $this->Payment->find('count', $options);

            $options = array();
            $options['conditions'] = array(
                'Payment.fecha_pago_programado BETWEEN ? AND ? ' => array($this->data['Payment']['fecha_inicial'], $this->data['Payment']['fecha_final']),
                'OR' => array('Payment.fecha_pago_real =' => '0000/00/00', 'Payment.fecha_pago_real >' => $this->data['Payment']['fecha_final']),
                'Proyect.desistio' => 0
            );
            if ($this->data['Payment']['branch_id'] != "") {
                $options['conditions']['Proyect.branch_id'] = $branch_id;
            }
            $options['fields'] = "sum(monto) as monto";
            $valorProgramadosNoPagados = $this->Payment->find('first', $options);

            if (isset($valorProgramadosNoPagados[0]['monto'])) {
                $valorProgramadosNoPagados = $valorProgramadosNoPagados[0]['monto'];
            } else {
                $valorProgramadosNoPagados = 0;
            }


            //no programados en el intervalo que se pagaron
            $options = array();



            $options['conditions'] = array(
                'Payment.fecha_pago_real BETWEEN ? AND ? ' => array($this->data['Payment']['fecha_inicial'], $this->data['Payment']['fecha_final']),
                'OR' => array(
                    'Payment.fecha_pago_programado >' => $this->data['Payment']['fecha_final'],
                    'Payment.fecha_pago_programado <' => $this->data['Payment']['fecha_inicial']
                ),
                'Proyect.desistio' => 0
            );
            if ($this->data['Payment']['branch_id'] != "") {
                $options['conditions']['Proyect.branch_id'] = $branch_id;
            }

            $noProgramados = $this->Payment->find('count', $options);


            $options = array();
            $options['conditions'] = array(
                'Payment.fecha_pago_real BETWEEN ? AND ? ' => array($this->data['Payment']['fecha_inicial'], $this->data['Payment']['fecha_final']),
                'OR' => array(
                    'Payment.fecha_pago_programado >' => $this->data['Payment']['fecha_final'],
                    'Payment.fecha_pago_programado <' => $this->data['Payment']['fecha_inicial']
                ),
                'Proyect.desistio' => 0
            );
            if ($this->data['Payment']['branch_id'] != "") {
                $options['conditions']['Proyect.branch_id'] = $branch_id;
            }
            $options['fields'] = "sum(monto) as monto";

            $valorNoProgramados = $this->Payment->find('first', $options);

            if (isset($valorNoProgramados[0]['monto'])) {
                $valorNoProgramados = $valorNoProgramados[0]['monto'];
            } else {
                $valorNoProgramados = 0;
            }


            //proyectos con fecha de solicitud que no se han pagado


            $options = array();
            $options['conditions'] = array(
                'Payment.fecha_solicitud_desembolso BETWEEN ? AND ? ' => array($this->data['Payment']['fecha_inicial'], $this->data['Payment']['fecha_final']),
                'Payment.fecha_pago_real' => '0000-00-00',
                'Proyect.desistio' => 0
            );

            if ($this->data['Payment']['branch_id'] != "") {
                $options['conditions']['Proyect.branch_id'] = $branch_id;
            }

            $pendientes = $this->Payment->find('count', $options);

            $options = array();
            $options['conditions'] = array(
                'Payment.fecha_solicitud_desembolso BETWEEN ? AND ? ' => array($this->data['Payment']['fecha_inicial'], $this->data['Payment']['fecha_final']),
                'Payment.fecha_pago_real' => '0000-00-00',
                'Proyect.desistio' => 0
            );

            if ($this->data['Payment']['branch_id'] != "") {
                $options['conditions']['Proyect.branch_id'] = $branch_id;
            }
            $options['fields'] = "sum(monto) as monto";
            $valorPendientes = $this->Payment->find('first', $options);


            if (isset($valorPendientes[0]['monto'])) {
                $valorPendientes = $valorPendientes[0]['monto'];
            } else {
                $valorPendientes = 0;
            }



            //total a desembolsar en todas las convocatorias
            $options = array();
            $options['conditions'] = array('Proyect.desistio' => 0);
            if ($this->data['Payment']['branch_id'] != "") {
                $options['conditions']['Proyect.branch_id'] = $branch_id;
            }
            $options['fields'] = "sum(monto) as monto";
            $totalDesembolsos = $this->Payment->find('first', $options);

            if (isset($totalDesembolsos[0]['monto'])) {
                $totalDesembolsos = $totalDesembolsos[0]['monto'];
            } else {
                $totalDesembolsos = 0;
            }


            $options = array();
            $options['conditions'] = array(
                'Payment.fecha_pago_real !=' => '0000-00-00',
                'Proyect.desistio' => 0
            );
            if ($this->data['Payment']['branch_id'] != "") {
                $options['conditions']['Proyect.branch_id'] = $branch_id;
            }
            $options['fields'] = "SUM(monto) as monto";
            $totalDesembolsado = $this->Payment->find('first', $options);

            if (isset($totalDesembolsado[0]['monto'])) {
                $totalDesembolsado = $totalDesembolsado[0]['monto'];
            } else {
                $totalDesembolsado = 0;
            }


            //Conteo desistimientos
            $options = array();
            $options['conditions'] = array(
                'Proyect.desistio' => 1,
                'Payment.fecha_pago_programado BETWEEN ? AND ? ' => array($this->data['Payment']['fecha_inicial'], $this->data['Payment']['fecha_final']),
            );
            if ($this->data['Payment']['branch_id'] != "") {
                $options['conditions']['Proyect.branch_id'] = $branch_id;
            }

            $conteoDesistimientos = $this->Payment->find('count', $options);


            //Valor desistimientos

            $options = array();
            $options['conditions'] = array(
                'Payment.fecha_pago_programado BETWEEN ? AND ? ' => array($this->data['Payment']['fecha_inicial'], $this->data['Payment']['fecha_final']),
                'Proyect.desistio' => 1
            );
            if ($this->data['Payment']['branch_id'] != "") {
                $options['conditions']['Proyect.branch_id'] = $branch_id;
            }
            $options['fields'] = "Payment.suma_monto";
            $desistimientos = $this->Payment->find('first', $options);





            $this->set('fecha_inicial', $this->data['Payment']['fecha_inicial']);
            $this->set('fecha_final', $this->data['Payment']['fecha_final']);
            $this->set('programados', $programados);
            $this->set('valorTotalProgramados', $valorTotalProgramados);
            $this->set('programadosYaPagados', $programadosYaPagados);
            $this->set('valorProgramadosYaPagados', $valorProgramadosYaPagados);
            $this->set('programadosPagados', $programadosPagados);
            $this->set('valorProgramadosPagados', $valorProgramadosPagados);
            $this->set('programadosNoPagados', $programadosNoPagados);
            $this->set('valorProgramadosNoPagados', $valorProgramadosNoPagados);
            $this->set('noProgramados', $noProgramados);
            $this->set('valorNoProgramados', $valorNoProgramados);
            $this->set('pendientes', $pendientes);
            $this->set('valorPendientes', $valorPendientes);
            $this->set('valorDesistimientos', $desistimientos['Payment']['suma_monto']);
            $this->set('conteoDesistimientos', $conteoDesistimientos);


            //total a desembolsar en todas las convocatorias
            $this->set('totalDesembolsos', $totalDesembolsos);
            $this->set('totalDesembolsado', $totalDesembolsado);
            $this->set('branch_id', $branch_id);
        } else {
            
        }
    }

    function pendientes($fechaInicio, $fechaFin, $branch_id) {
        $this->layout = 'ajax';
        $options = array();
        $options['conditions'] = array('Payment.fecha_pago_programado <' => $fechaFin, 'Payment.fecha_pago_real' => '0000-00-00','Proyect.desistio'=>0);
        $options['fields'] = array('Payment.id', 'Proyect.call_id', 'Proyect.codigo', 'Payment.fecha_pago_programado', 'Payment.fecha_pago_real', 'Payment.monto', 'Payment.tipo');
        $options['order'] = array('Proyect.call_id' => 'desc', 'Payment.fecha_pago_programado' => 'asc');
        if ($branch_id != 0) {
            $options['conditions']['Proyect.branch_id'] = $branch_id;
        }
        $this->Payment->unBindModel(array('hasMany' => array('PaymentReview', 'Expense')));

        $payments = $this->Payment->find('all', $options);
        $this->set('payments', $payments);
    }

    function proyects_index($tipo, $convocatoria, $fechaInicio, $fechaFin, $branch_id) {
        $this->layout = 'ajax';
        $options = array();

        $options['fields'] = array('Proyect.call_id', 'Proyect.codigo', 'Payment.fecha_pago_programado', 'Payment.fecha_pago_real', 'Payment.monto', 'Payment.tipo', 'Payment.fecha_solicitud_desembolso');



        switch ($tipo) {
            case 1:
                $options['conditions'] = array(
                    'Payment.fecha_pago_programado BETWEEN ? AND ? ' => array($fechaInicio, $fechaFin),
                    'Payment.fecha_pago_real < ' => $fechaInicio,
                    'Payment.fecha_pago_real != ' => '0000/00/00',
                    'Proyect.desistio' => 0
                );
                break;
            case 2:
                $options['conditions'] = array(
                    'Payment.fecha_pago_programado BETWEEN ? AND ? ' => array($fechaInicio, $fechaFin),
                    'Proyect.desistio' => 0
                );
                break;
            case 3:
                $options['conditions'] = array(
                    'Payment.fecha_pago_programado BETWEEN ? AND ? ' => array($fechaInicio, $fechaFin),
                    'OR' => array('Payment.fecha_pago_real >' => $fechaFin, 'Payment.fecha_pago_real' => '0000/00/00'),
                    'Proyect.desistio' => 0
                );
                break;
            case 4:
                $options['conditions'] = array(
                    'Payment.fecha_pago_programado BETWEEN ? AND ? ' => array($fechaInicio, $fechaFin),
                    'Payment.fecha_pago_real BETWEEN ? AND ? ' => array($fechaInicio, $fechaFin),
                    'Proyect.desistio' => 0
                );
                break;
            case 5:
                $options['conditions'] = array(
                    'Payment.fecha_pago_real BETWEEN ? AND ? ' => array($fechaInicio, $fechaFin),
                    'OR' => array(
                        'Payment.fecha_pago_programado >' => $fechaFin,
                        'Payment.fecha_pago_programado <' => $fechaInicio
                    ),
                    'Proyect.desistio' => 0
                );
                break;
            //Meta real programados - programados pagados anteriormente
            case 6:
                $options['conditions'] = array(
                    'Payment.fecha_pago_programado BETWEEN ? AND ? ' => array($fechaInicio, $fechaFin),
                    'OR' => array('Payment.fecha_pago_real BETWEEN ? AND ?' => array($fechaInicio, $fechaFin),
                        'Payment.fecha_pago_real' => '0000/00/00'
                    ),
                    'Proyect.desistio' => 0
                );
                break;
            case 7:
                $options['conditions'] = array(
                    'Payment.fecha_pago_real BETWEEN ? AND ? ' => array($fechaInicio, $fechaFin),
                    'Proyect.desistio' => 0
                );
                break;
            case 8:
                $options['conditions'] = array(
                    'Payment.fecha_solicitud_desembolso BETWEEN ? AND ? ' => array($fechaInicio, $fechaFin),
                    'Payment.fecha_pago_real' => '0000-00-00',
                    'Proyect.desistio' => 0
                );
                break;

            case 9:
                $options['conditions'] = array(
                    'Payment.fecha_pago_programado BETWEEN ? AND ? ' => array($fechaInicio, $fechaFin),
                    'Proyect.desistio' => 1
                );
                break;
            default:
                break;
        }
        $this->Payment->unBindModel(array('hasMany' => array('PaymentReview', 'Expense')));


        if ($convocatoria != 0) {
            $options['conditions']['Proyect.call_id'] = $convocatoria;
        }
        if ($branch_id != 0) {
            $options['conditions']['Proyect.branch_id'] = $branch_id;
        }
        $payments = $this->Payment->find('all', $options);
        $this->set('payments', $payments);
    }

    function view($payment_id) {
        $this->layout = 'ajax';
        $this->Payment->recursive = -1;
        $pago = $this->Payment->find('first', array('conditions' => array('Payment.id' => $payment_id)));

        App::Import('Model', 'Proyect');
        $proyecto = new Proyect();

        $proyecto->recursive = -1;
        $options['joins'] = array(
            array('table' => 'user_proyects',
                'alias' => 'UserProyect',
                'type' => 'Left',
                'conditions' => array(
                    'UserProyect.proyect_id = Proyect.id'
                )
            ),
            array('table' => 'users',
                'alias' => 'User',
                'type' => 'Left',
                'conditions' => array(
                    'UserProyect.user_id = User.id'
                )
            )
        );
        $options['conditions'] = array('Proyect.id' => $this->data["Payment"]["proyect_id"]);
        $options['fields'] = array('User.nombre', 'User.primer_apellido', 'User.segundo_apellido', '');
        $nombreUsuario = $proyecto->find('first', $options);
        $this->set('nombreUsuario', $nombreUsuario);

        $this->Payment->PaymentReview->recursive = 0;
        $payment_reviews = $this->Payment->PaymentReview->find('all', array('conditions' => array('PaymentReview.payment_id' => $payment_id), 'fields' => array('PaymentReview.id', 'PaymentReview.fecha', 'PaymentReview.observacion', 'User.nombre', 'User.primer_apellido', 'User.segundo_apellido')));
        $this->set('payment_reviews', $payment_reviews);
        $this->set('pago', $pago);
    }

    public function report() {
        $this->layout = 'csv';
        ini_set('max_execution_time', 600); //increase max_execution_time to 10 min if data set is very large
        date_default_timezone_set("America/Bogota");
        $filename = "Estado_Pagos_" . date("Y.m.d") . ".csv";
        $csv_file = fopen('php://output', 'w');
        header('Content-type: application/csv');
        header('Content-Disposition: attachment; filename="' . $filename . '"');

        $sql = "SELECT a.fecha_pago_programado,a.fecha_solicitud_desembolso, d.nombre, b.codigo, a.monto, a.fecha_pago_real, YEAR(a.fecha_pago_real) as year, c.nombre, a.tipo FROM payments a
LEFT JOIN proyects b ON a.proyect_id = b.id
LEFT JOIN calls c ON b.call_id = c.id
LEFT JOIN branches d ON d.id = b.branch_id
WHERE b.desistio=0 ORDER BY `c`.`nombre` ASC";

        $results = $this->Payment->query($sql);

        // The column headings of your .csv file
        $header_row = array("PROYECTO", "VALOR", "FECHA PAGO REAL", "FECHA PAGO PROGRAMADO", "VIGENCIA", "CONVOCATORIA", "PAGO", "PAGO CONFIRMADO", "TERRITORIAL", "FECHA SOLICITUD DE DESEMBOLSO");
        fputcsv($csv_file, $header_row, ';', '"');

        foreach ($results as $result) {
            $pagoConfirmado = "";
            $fechaPagoReal = "";
            $anio = "";
            if ($result['a']['fecha_pago_real'] == '0000-00-00') {

                if ($result['a']['fecha_solicitud_desembolso'] == '0000-00-00') {
                    $pagoConfirmado = "SIN PAGO";
                } else {
                    $pagoConfirmado = "PENDIENTE";
                }
            } else {
                $pagoConfirmado = "SI";
                $fechaPagoReal = $result['a']['fecha_pago_real'];
                $anio = $result[0]['year'];
            }

            $row = array(
                $result['b']['codigo'],
                str_replace('.', ',', $result['a']['monto']),
                $fechaPagoReal,
                $result['a']['fecha_pago_programado'],
                $anio,
                //year
                $result['c']['nombre'],
                $result['a']['tipo'],
                $pagoConfirmado,
                $result['d']['nombre'],
                $result['a']['fecha_solicitud_desembolso'],
            );
            fputcsv($csv_file, $row, ';', '"');
        }

        fclose($csv_file);
    }

    public function edit2($id = null) {
        $this->layout = 'ajax';
        if (!empty($this->data)) {
            $fecha_actual = time();
            if (strtotime($this->data['Payment']['fecha_pago_real']) <= $fecha_actual) {
                if ($this->Payment->save($this->data)) {
                    $this->Session->setFlash('El pago ha sido guardado');
                    $this->redirect(array('action' => 'index', $this->data['Payment']['proyect_id']));
                } else {
                    $this->Payment->recursive = -1;
                    $this->Session->setFlash('El pago no se pudo guardar. Por favor intentelo nuevamente.');
                }
            } else {
                $this->Session->setFlash('La fecha es mayor a la fecha actual. Por favor ingrese una fecha menor o igual a la fecha actual.', 'flash_custom');
                $this->redirect(array('action' => 'index', $this->data['Payment']['proyect_id']));
            }
        } else {
            $this->data = $this->Payment->find('first', array('conditions' => array('Payment.id' => $id)));

            App::Import('Model', 'Proyect');
            $proyecto = new Proyect();

            $proyecto->recursive = -1;
            $options['joins'] = array(
                array('table' => 'user_proyects',
                    'alias' => 'UserProyect',
                    'type' => 'Left',
                    'conditions' => array(
                        'UserProyect.proyect_id = Proyect.id'
                    )
                ),
                array('table' => 'users',
                    'alias' => 'User',
                    'type' => 'Left',
                    'conditions' => array(
                        'UserProyect.user_id = User.id'
                    )
                )
            );
            $options['conditions'] = array('Proyect.id' => $this->data["Payment"]["proyect_id"], 'User.group_id' => '19');
            $options['fields'] = array('User.nombre', 'User.primer_apellido', 'User.segundo_apellido', '');
            $nombreUsuario = $proyecto->find('first', $options);
            $this->set('nombreUsuario', $nombreUsuario);

            $this->Payment->PaymentReview->recursive = 0;
            $payment_reviews = $this->Payment->PaymentReview->find('all', array('conditions' => array('PaymentReview.payment_id' => $id), 'fields' => array('PaymentReview.id', 'PaymentReview.fecha', 'PaymentReview.observacion', 'User.nombre', 'User.primer_apellido', 'User.segundo_apellido')));
            $this->set('payment_reviews', $payment_reviews);
        }
    }

}
